#include "Cultivo.h"

Cultivo::Cultivo(){
	EstadoDeMaduracion=0;
	crecimiento=0;
	EstadoDeDegradacion=0;
	
}

Cultivo::~Cultivo(){}

int Cultivo::devolerPosicionFactor(std::string nombre,std::vector<Factor*> v){
	 
	
	int pos=0;
	 std::vector<Factor*>::iterator it;
	 for(it=v.begin();it!=v.end();it++){
		if((*it)->getNombre().compare(nombre)==0)
		return pos;
		pos++; 
	 }
	 return -1; /*No lo encontro*/
}

void Cultivo::actualizarEstado(std::string factor, int valor,int dias){}
void Cultivo::setEstadoDeMaduracion(unsigned estado){
	   
	 crecimiento=crecimiento+estado;
		
}	

void Cultivo::reiniciar(){
	crecimiento=0;
	EstadoDeMaduracion=0;
	EstadoDeDegradacion=0;

}

void Cultivo::ponderar(int ponderacion){
	
	/*crecimiento=crecimiento* ((double)(100/tiempoMaduracion));*/
        crecimiento=crecimiento/ponderacion;
	EstadoDeMaduracion+=crecimiento;
	
	 /*Chequea que no se pase*/
	 if(EstadoDeMaduracion>=10000){
		  EstadoDeMaduracion=10000;
		  if(EstadoDeDegradacion>=100)
			   EstadoDeDegradacion=100;
		  else
  		           EstadoDeDegradacion+=degradacion;
	 }	 
	
	 crecimiento=0;
		
}


/*CULTIVOS QUE HEREDAN*/

Maiz::Maiz():Cultivo(){
	
    setTiempoMaduracion(130);
    setDegradacion(12);
		
}

Soja::Soja():Cultivo(){
	
    setTiempoMaduracion(123);
    setDegradacion(15);
}
	
Girasol::Girasol():Cultivo(){
	
    setTiempoMaduracion(140);
    setDegradacion(9);
}
	
void Maiz::actualizarEstado(std::string factor, int valor,int dias){
	
	int pos=devolerPosicionFactor(factor,vectorFactores);
	if(pos!=-1){
		setEstadoDeMaduracion(vectorFactores[pos]->getValor(valor));
		
	}
}

	
void Soja::actualizarEstado(std::string factor, int valor,int dias){
	
	int pos=devolerPosicionFactor(factor,vectorFactores);
	if(pos!=-1)
	   setEstadoDeMaduracion( vectorFactores[pos]->getValor(valor));
	
}

void Girasol::actualizarEstado(std::string factor, int valor,int dias){
	
	int pos=devolerPosicionFactor(factor,vectorFactores);
	if(pos!=-1)
		setEstadoDeMaduracion(vectorFactores[pos]->getValor(valor));
		
}

std::vector<Factor*> Maiz::vectorFactores;
void Maiz:: cargarFactores(){
	
	      std::ifstream archivo("maiz.txt");
	      std::string nombre;
	      int cantidad=0;
	      archivo>> cantidad;
	      for(int i=0;i<cantidad;i++){ 
	      		archivo>> nombre;
          		vectorFactores.push_back(new Factor(nombre,&archivo));
		  } 
		  archivo.close();
}	

std::vector<Factor*> Soja::vectorFactores;
void Soja:: cargarFactores(){
	      
	      std::ifstream archivo("soja.txt");
	      std::string nombre;
	      int cantidad=0;
	      archivo>> cantidad;
	      for(int i=0;i<cantidad;i++){ 
	      		archivo>> nombre;
          		vectorFactores.push_back(new Factor(nombre,&archivo));
		  } 
		  archivo.close();
}		

std::vector<Factor*> Girasol::vectorFactores;
void Girasol:: cargarFactores(){

	      std::ifstream archivo("girasol.txt");
	      std::string nombre;
     	      int cantidad=0;
	      archivo>> cantidad;
	      for(int i=0;i<cantidad;i++){ 
			   archivo>> nombre;
			   vectorFactores.push_back(new Factor(nombre,&archivo));
		  }
		archivo.close();		  
}		

void Maiz:: borrarVectorFactores(){

    std::vector<Factor*>::iterator it;
	for (it=vectorFactores.begin();it!=vectorFactores.end();it++)
		  delete (*it);
		
}	

void Soja:: borrarVectorFactores(){
    std::vector<Factor*>::iterator it;
	for (it=vectorFactores.begin();it!=vectorFactores.end();it++)
		  delete (*it);
}	
void Girasol:: borrarVectorFactores(){
		std::vector<Factor*>::iterator it;
		for (it=vectorFactores.begin();it!=vectorFactores.end();it++)
		  delete (*it);
}
